<?php
/**
 * Created by JetBrains PhpStorm.
 * User: oliverson
 * Date: 12/2/12
 * Time: 11:14 AM
 * To change this template use File | Settings | File Templates.
 */
class Bootstrap_EMyLink
{
    public $module="";
    public $action="";
    public $request=array();
    public $class_action;
    public $application;
    public function __construct($config)
    {

        $arr=explode("index.php",$_SERVER['PHP_SELF']);
        $application=$config["application_default"];
        /*
         * #1
         * kiểm tra nếu đường dẫn rỗng sẽ trả về
         * application = frontend
         * moudle = module_default trong file config
         * action = action_default trong file config
         */
        if(!$arr[1])
        {
            $this->check($config["module_default"],$config["action_default"],$application);
        }
        /*
         * #1
         */
        /*
         * #2
         * kiểm tra nếu đường dẫn không rỗng
         * sẽ cắt đường dẫn tại /
         * kiểm tra application_ext trong file config có tồn tại trông url không
         * nếu có
         * thay đổi index của module và action
         * sau đó check xem module và action tồn tại không nếu tồn tại trả về action và module
         * sai
         * sẽ chuyển sang trang error 404
         */
        else
        {
            $router=new Router_EMyLink();
            /*
             * kiểm tra url có trong router không
             */
            if($router->checkURL($arr[1]))
            {
                $application=$router->application;
                $this->check($router->module,$router->action,$application);
                $this->request=$router->request;
            }
            /*
             * if không có lấy url theo framework
             */
            else
            {
                $arr_url=explode("/",$arr[1]);
                $index_module=1;
                $index_action=2;
                if($this->checkApplication($arr_url[1]))
                {
                    $application=$arr_url[1];
                    $index_module=2;
                    $index_action=3;
                    if(isset($arr_url[$index_module]))
                    {
                        if(isset($arr_url[$index_action]))
                        {
                            $this->check($arr_url[$index_module],$arr_url[$index_action],$application);
                        }
                        else
                        {
                            $this->check($arr_url[$index_module],"",$application);
                        }
                    }
                    else
                    {
                        $this->check($config["module_default"],$config["action_default"],$application);
                    }
                }
                else
                {
                    if(isset($arr_url[$index_action]))
                    {
                        $this->check($arr_url[$index_module],$arr_url[$index_action],$application);
                    }
                    else
                    {
                        $this->check($arr_url[$index_module],"",$application);
                    }
                }
                $this->request=$this->getRequest($index_action+1,$arr_url);
            }
        }
        /*
         * #2
         */
        $this->application=$application;
    }
    /*
     * hàm check application
     */
    private function checkApplication($application)
    {
        $fileList = scandir(ROOT_PATH."/application");
        foreach($fileList as $file)
        {
            if ($file != '.' && $file != '..')
            {
                if($file==$application)
                {
                    return true;
                }
            }
        }
        return false;
    }
    /*
     * hàm check module và action tồn tại không
     */
    private function check($module,$action,$application)
    {
        if($action=="")
        {
            $action="index";
        }
        if(file_exists(ROOT_PATH."/application/".$application."/module/".$module."/action/".$action.".php")&&
            file_exists(ROOT_PATH."/application/".$application."/module/".$module."/template/".$action.".template.php"))
        {
            $this->module=$module;
            $this->action=$action;
            $this->class_action=$module."_".$action;
        }
        else
        {
            header("Location: ".ROOT_URL."/error/404.php");
        }
    }
    /*
     * lấy request từ url
     */
    private function getRequest($index,$arr_url)
    {
        $request=array();
        while(isset($arr_url[$index]))
        {
            if(!key_exists($arr_url[$index],$request))
            {
                $value = isset($arr_url[$index+1])?$arr_url[$index+1]:"";
                $request[$arr_url[$index]]=$value;
            }
            else
            {
                header("Location: ".ROOT_URL."/error/404.php");
            }
            $index=$index+2;
        }
        return $request;
    }
}
